package com.meeting.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.meeting.dto.RoomAvailabilityDTO;
import com.meeting.dto.RoomDTO;
import com.meeting.dto.RoomQueryDTO;
import com.meeting.dto.RoomStatusQueryDTO;
import com.meeting.dto.RoomStatusUpdateDTO;
import com.meeting.entity.Rooms;
import com.meeting.vo.PageResult;
import com.meeting.vo.RoomGridStatusVO;
import com.meeting.vo.RoomsVO;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;

@Service
public interface RoomsService extends IService<Rooms> {
    PageResult<RoomsVO> listRooms(RoomQueryDTO roomQueryDTO);

    RoomGridStatusVO getRoomStatusGrid(RoomStatusQueryDTO roomStatusQueryDTO);

    void setRoomsStatus(Integer roomId, Integer status);

    void setToUsing(RoomStatusUpdateDTO dto);

    void setToRepair(Integer roomId);

    void setToIdle(Integer roomId);

    // 新增：获取会议室详情方法
    /**
     * 获取会议室详情
     * @param id 会议室ID
     * @return 会议室详情
     */
    RoomsVO getRoomDetail(Integer id);

    // 新增：检查会议室可用性方法
    /**
     * 检查会议室可用性
     * @param availabilityDTO 可用性检查参数
     * @return 是否可用
     */
    boolean checkRoomAvailability(RoomAvailabilityDTO availabilityDTO);

    /**
     * 新增会议室
     * @param roomDTO 会议室数据
     * @return 是否成功
     */
    boolean addRoom(RoomDTO roomDTO);

    /**
     * 修改会议室
     * @param roomDTO 会议室数据
     * @return 是否成功
     */
    boolean updateRoom(RoomDTO roomDTO);

    /**
     * 删除会议室
     * @param id 会议室ID
     * @return 是否成功
     */
    boolean deleteRoom(Integer id);

    /**
     * 修改会议室状态
     * @param id 会议室ID
     * @param status 状态
     * @return 是否成功
     */
    boolean updateRoomStatus(Integer id, Integer status);
    
    /**
     * 检查会议室是否可以修改或删除
     * @param id 会议室ID
     * @return 是否可以修改或删除
     */
    boolean checkRoomModifiable(Integer id);
}